# 1.11 对切片命名 使用内置的slice()函数创建一个切片对象

items = [0,1,2,3,4,5,6,7,8]
a = slice(2,4) # 相当于 items[2:4] 通过切片函数可以使得代码更容易理解

items[a] = [10,11] # 可以进行任何的切片操作 如替换
#del items[a]  # 删除
a.start #通过start和stop,step 属性来得到相关信息
a.stop
a.step
# 通过使用indices(size)方法将切片映射到特定大小的序列上:
s = 'HelloWorld'
a.indices(len(s))
for i in range(*a.indices(len(s))):
    print(s[i])

# 1.12 找出序列中出现次数最多的元素
#解决方案 collections 模块中的counter类正是为此类问题设计的,里面有个most_common()方法直接处理
# 例:
words = ['a','b','g','f','w','w','q','a','b','a','t']
words1 = ['a','b','a','t','g','w']
from collections import Counter
word_counts = Counter(words)
top_three = word_counts.most_common(3)
print(top_three)
# counter 也可以通过数学运算结合,
word1_counts = Counter(words1)
total = word_counts + word1_counts
print(total)

# 1.13 通过公共建对字典列表排序
#解决方案: 利用operator 模块中的itemgetter函数对这类结构进行排序 (itemgetter函数获取的不是值，而是定义了一个函数，通过该函数作用到对象上才能获取值。)
rows = [
        {'fname':'zhangyu','uid':'1001'},
        {'fname':'Lisi','uid':'1003'},
        {'fname':'wangwu','uid':'1004'},
        {'fname':'zhaoliu','uid':'1002'},
]

from operator import itemgetter

rows_by_name = sorted(rows, key=itemgetter('fname'))
rows_by_uid = sorted(rows,key=itemgetter('uid')) #与下面的匿名函数效果一样. 但性能更出色
rows_by_uid2 = sorted(rows,key=lambda r:r['uid'])
print(rows_by_uid2)